interface Children {
	school()
	play()
}

interface Father {
	play()
}

let child: Children = {
	school() {},
	play() {},
}

let father: Father = {
	play() {},
}


type ChildTransform = (child:Children) => Children

type FatherTransform = (child:Father) => Father

let childTransform: ChildTransform = (f) => f  
let fatherTransform: FatherTransform = t => t
fatherTransform = childTransform
/**
 * 
 */
/**
 * typescript
 * 类型安全
 * 成员少可以被成员多的赋值（也就是多给少）
 * 
 * 
 * 逆变就是父类可以赋值给子类
 * 例子： 函数的参数就是逆变
 * 怎么理解
 * 函数的参数要从函数的调用来理解
 * fatherTransform的参数被赋值为了子类的类型也就是Children（收）
 * 那么我调用这个参数的时候，传入的Father（给）类型的参数
 * 那么这个时候是把Father类型的参数给了Children   不符合规则
 * 
 * 
 * 函数的返回值
 * fatherTransform = childTransform
 * 把子类复制给父类是合法的
 * 
 */


export {}
